package arithmetic;

import org.junit.jupiter.api.Test;

/**
 * 回文数
 *
 * @author gaojie
 * @date 2022-02-21
 */
public class PalindromicNumber {

    @Test
    void test() {
        assert !fun(-1);
        assert !fun(-123);
        assert !fun(12210);
        assert !fun(123210);
        assert !fun(Integer.MAX_VALUE);
        assert fun(0);
        assert fun(6);
        assert fun(12321);
        assert fun(1234554321);
    }

    /**
     * 1.负数肯定不是 false
     * 2.小于 10 的整数，即个位数肯定是 true
     * 3.以 0 结尾的多位整数，肯定不对称 false
     * 4.其余的依次切断最后 1 位拼接到另 1 边，然后比较，若相等或者差 10 倍，则 true，否则 false
     */
    private boolean fun(int x) {
        if (x < 0) return false;
        if (x < 10) return true;
        if (x % 10 == 0) return false;
        int i = 0;
        do {
            i = i * 10 + x % 10;
            x /= 10;
            System.out.printf("i = %d, x = %d%n", i, x);
        } while (x > i);
        return i == x || x == i / 10;
    }
}
